home *** CD-ROM | disk | FTP | other *** search
/ Java for 3D & VRML Worlds / Java for 3d and VRML Worlds.iso / examples / chap04 / RollingCD.java < prev    next >
Text File  |  1996-09-19  |  2KB  |  60 lines

  1. //
  2. // a sample CD rolls 360 degrees around a random axis when you clicks it.
  3. //
  4.  
  5. import java.util.*;
  6. import vrml.*;
  7. import vrml.node.*;
  8. import vrml.field.*;
  9.  
  10. public class RollingCD extends Script{
  11.     MFRotation setCDrollingAxis;
  12.     SFTime setCDstartTime;
  13.     float rollingParameters[] = new float[4 * 5];
  14.     Random randomNumGenerator = new Random();
  15.     
  16.     public void initialize(){
  17.         // get the reference of the event-out 'setCDrollingAxis'.
  18.         setCDrollingAxis = (MFRotation)getEventOut("setCDrollingAxis");
  19.         
  20.         // get the reference of the event-out 'setCDstartTime'.
  21.         setCDstartTime = (SFTime)getEventOut("setCDstartTime");
  22.         
  23.         // initialize the rolling parameters.
  24.         // axis is set later in setRollingParameters().
  25.         // here is to set angles.
  26.         rollingParameters[3] =  0.0f;
  27.         rollingParameters[7] =  1.57f;
  28.         rollingParameters[11] = 3.14f;
  29.         rollingParameters[15] = 4.71f;
  30.         rollingParameters[19] = 6.28f;
  31.     }
  32.     
  33.     public void processEvent(Event e){
  34.         if(e.getName().equals("touched") == true){
  35.             setRollingParameters();
  36.  
  37.             // invoke the time sensor to roll the CD.
  38.             setCDstartTime.setValue(((ConstSFTime)e.getValue()).getValue());
  39.         }
  40.     }
  41.     
  42.     // set the rolling axis randomly.
  43.     void setRollingParameters(){
  44.         // angle ranging between 0 to 2PI.
  45.         double angle = randomNumGenerator.nextDouble() * Math.PI * 2.0;
  46.         // axis.
  47.         double axisX = Math.cos(angle);
  48.         double axisY = Math.sin(angle);
  49.  
  50.         for(int i = 0; i < 5; i++){
  51.             rollingParameters[i * 4 + 0] = (float)axisX;
  52.             rollingParameters[i * 4 + 1] = (float)axisY;
  53.             rollingParameters[i * 4 + 2] = 0.0f;
  54.         }
  55.  
  56.         // set keyValue field of the OrientationInterpolator.
  57.         setCDrollingAxis.setValue(4 * 5, rollingParameters);
  58.     }
  59. }
  60.